package com.util;

import javax.management.RuntimeErrorException;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

	private static final SessionFactory sessionFactory = buildSessionFactory();
	/**
	 * 
	 * @param Metodo que construye una sessionFactory
	 */
	@SuppressWarnings("deprecation")
	private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            return new AnnotationConfiguration().configure()
                    .buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
	
	/**
	 * 
	 * @return SessionFactory
	 * @param Metodo que devuelve el miembro sessionFactory
	 */
	public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
	/**
	 * 
	 * @return Session
	 * @param Metodo que retorna una session del miembro sessionFactory
	 */
	public static Session getSesion(){
		return sessionFactory.getCurrentSession();
	}
	/**
	 * 
	 * @return Session
	 * @param Metodo que abre una sesion
	 */
	public static Session abrirSesion(){
		return sessionFactory.openSession();
	}
	
	/**
	 * @return void
	 * @param Metodo utilizado para cerrar la sesion
	 */
	public static void cerrarSesion(){
		try {
			sessionFactory.close();
		} catch (HibernateException ex) {
			throw new RuntimeException(ex);
		}
	}
	
}
